Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Informática gráfica aplicada. Módulo DirectX (página 2)




Enviado por Pablo Turmero



Partes: 1, 2

Monografias.com

Módulo DirectX – Direct3D
Interfaz gráfica para hardware 3D
Permitir gráficos tridimensionales interactivos en aplicaciones de Windows
2 Modos:
Inmediato
API 3D de bajo nivel
Independiente del dispositivo
Programadores experimentados
Retenido
Desarrollo rápidos
Capa superior del inmediato

Monografias.com

Módulo DirectX – Direct3D
Conceptos Básicos
Sistemas de coordenadas 3-D
Left-handed (mano izquierda)
Podemos simular el right-handed
Transformaciones 3-D
Traslación
Rotación
Escalado
Polígonos
Normales de cara y vértice
Modos de sombreado
Interpolaciones de triángulos

Monografias.com

Módulo DirectX – Direct3D
Conceptos Básicos
Triángulos
Reglas de rasterización de triángulos

Monografias.com

Módulo DirectX – Direct3D (Modo Inmediato)
Tipos de Objetos
IDirectDraw
IDirectDrawSurface
IDirect3Ddevice
IDirect3Dmaterial
IDirect3Dviewport
IDirect3Dlight
IDirect3DexecuteBuffer

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMAnimation
Define como será modificada una transformación acorde al valor tiempo
La animación es ajustada mediante el método SetTime

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMAnimationSet
Permite a IDirect3DRMAnimation que haya agrupación
Compartirán el mismo parámetro tiempo

Dim anim As IDirect3DRMAnimationSet
D3DRM.CreateAnimationSet anim
anim.Load App.Path & "anim.x", 0, 0, 0, 0, animframe
anim.SetTime 1

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMDevice
Representa la visualización final del Render creado
Soporta Devices que renderizan directamente a la pantalla, ventana o memoria de vídeo
Dim Device As IDirect3DRMDevice
D3DRM.CreateDeviceFromSurface …

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMFace
Representa un único objeto en un mesh

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMFrame
Posiciona objetos en una escena y define las posiciones y orientaciones de los objetos visuales
Escena: frame que no tiene "padre", define el frame de referencia para todos los demás objetos
Jerarquías y Motion (rotación y velocidad intrínseca)

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMInterpolator
Guarda acciones y las aplica a otros objetos mediante cálculos automáticos
Ej.: Background en el espacio tiempo 0 el color rojo y en el 10 el color verde. Coloreará de forma automática las escenas sucesivas para fundir desde el rojo al verde

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMLight
Define uno de los 5 tipos de luces que son utilizadas para iluminar los objetos visuales de la escena
Ambiente, Point, Spotlight, Directional y Parallel point
La luz va contenida en un frame y consume mucho proceso de CPU

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMMaterial
Define cómo una superficie refleja la luz
IDirect3DRMMesh
Podemos utilizarlo para manipular grupos de caras y vértices
IDirect3DRMMeshBuilder
Nos permite trabajar con vértices y caras individuales de un mesh. Realmente formará un objeto 3D en la escena

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMPickedArray
Identifica un objeto visual que corresponde a un punto 2D determinado
IDirect3DRMPicked2Array
Suele ser utilizado para colisiones entre objetos
IDirect3DRMShadow
Define una sombra emitida por otro

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMObject
Clase base utilizada por todos los demás objetos del modo retenido
IDirect3DRMProgressiveMesh
Permite la carga de objetos 3D mediante pequeñas porciones
IDirect3DRMTexture
Consta de un array rectangular de píxeles coloreados

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMViewport
Define cómo la escena 3D es renderizada en un plano 2D (como una ventana de Windows)
Cámara: renderiza lo que es visible a lo largo del eje Z positivo, con la dirección ascendente representada en el eje Y positivo
Viewing Frustum: cámara en el pico de la pirámide. Serán visibles los objetos entre el front y el back clipping

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMVisual
Representa cualquier cosa que pueda ser renderizada en una escena

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMWrap
Calcula las coordenadas de textura para una cara o mesh.
Tipo
Frame de referencia
Origen
Vector de dirección
Vector de altura
Factores de escalado
Origen para las coordenadas de textura

Monografias.com

Módulo DirectX – Direct3D (Modo Retenido)
IDirect3DRMWrap
Tipos
Wrapping Flags
Flat
Cylindrical
Spherical
Chrome

Monografias.com

Módulo DirectX Programación Direct3D
Ejemplo 1
Ejemplo 2

Monografias.com

Programación Direct3D
Decidir entre Clipper o FullScreen
La programación se basa en frames.
Puede contener uno o más objetos
Cada objeto 3D debe ir enlazado a un frame determinado
Cinco objetos básicos
Device
Viewport
Scene
World
Camera

Monografias.com

Programación Direct3D

 

Inicio del Programa
 
Option Explicit

Objeto Direct3D M. retenido
 
Dim D3DRM As IDirect3DRM3
Dim Scene As IDirect3DRMFrame3 Frame de escena
Dim Camera As IDirect3DRMFrame3 Frame de cámara
Dim clipper As IDirectDrawClipper Objeto Clipper
Dim Device As IDirect3DRMDevice3 Objeto Device
Dim Viewport As IDirect3DRMViewPort Objeto Viewport
Dim LightFrame As IDirect3DRMFrame3 Frame de Luz
Dim Light As IDirect3DRMLight Objeto Luz
Dim Globe As IDirect3DRMMeshBuilder3 Mesh (objeto 3D)
Dim globeframe As IDirect3DRMFrame3 Frame del Mesh
Dim salir As Boolean Fin de la aplicación

Monografias.com

Programación Direct3D
Inicializar los objetos Direct3D Modo Retenido, Clipper, Viewport y Device. Se crean los frames correspondientes a la escena y la cámara, enlazando el frame cámara a de la escena para que la visualización sea posible
Sub init_clipper()

Creamos el objeto Direct3D Modo Retenido
Direct3DRMCreate D3DRM

Creamos el frame de la escena sin enlazarlo a ningún frame, puesto que será el frame padre
D3DRM.CreateFrame Nothing, Scene

Creamos el frame de cámara enlazándolo directamente al de la escena y lo posicionamos en 0,0,0 de X, Y y Z. Variando estos valores podremos mover la cámara hacia diferentes puntos de vista de la escena que hemos creado.
D3DRM.CreateFrame Scene, Camera
Camera.SetPosition Scene, 0, 0, 0

Creamos el clipper (ventana)
DirectDrawCreateClipper 0&, clipper, Nothing
clipper.SetHWnd 0, Me.hWnd

Creamos el Device y el Viewport. El Device debemos enlazarlo al Clipper para que los gráficos 3D sean volcados en el mismo. En la creación del Viewport es necesario señalar el frame del Device y la cámara que utilicemos.
D3DRM.CreateDeviceFromClipper clipper, ByVal 0&, 320, 200, Device
D3DRM.CreateViewport Device, Camera, 0, 0, 320, 200, Viewport
End Sub

Monografias.com

Programación Direct3D
ApplyTexture es un procedimiento encargado de crear el wrapper (envoltura) y la textura que se aplicarán a un objeto determinado. Los parámetros son: Meshbuilder que asigna el objeto que se verá afectado por la textura y StrTextureFileName que pasa el nombre del fichero que contiene la textura a aplicar
Sub ApplyTexture(MeshBuilder As IDirect3DRMMeshBuilder3, ByVal strTextureFileName As String)

Dim Box As D3DRMBOX Volumen del objeto
Dim MaxY As Single Valor máximo
Dim MinY As Single Valor mínimo
Dim Height As Single Valor de alto
Dim Wrap As IDirect3DRMWrap Wrapper
Dim texture As IDirect3DRMTexture Textura

Tomamos el objeto para crear una caja imaginaria que lo cubra
MeshBuilder.GetBox Box
MaxY = Box.Max.Y
MinY = Box.Min.Y
Height = MaxY – MinY

Monografias.com

Programación Direct3D

Creamos el wrapper con los valores obtenidos anteriormente
D3DRM.CreateWrap D3DRMWRAP_CYLINDER, Nothing, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, MinY / Height, 1, -1 / Height, Wrap

Aplicamos el wrapper al objeto
Wrap.Apply MeshBuilder

Cargamos la textura con la variable texture
D3DRM.LoadTexture strTextureFileName, texture
MeshBuilder.SetTexture texture
Set texture = Nothing
End Sub

Mediante Form_Keypress detectamos si se ha pulsado una tecla para salir del programa automáticamente
Private Sub Form_KeyPress(KeyAscii As Integer)
salir = True
End Sub

Monografias.com

Programación Direct3D

En este procedimiento de formulario iniciamos los valores necesarios pare crear los objetos que conformarán la escena 3D. Además, también gestionamos el bucle principal que permitirá la visualización de la escena en pantalla
Private Sub Form_Load()

Llamamos a init_clipper para crear los frames y el clipper
init_clipper

El método SetBack se aplica al frame Viewport. Se encarga de establecer el espacio en el cual es posible visualizar los objetos. Si un objeto, o parte de él, sobrepasa este valor, no será representado en pantalla
Viewport.SetBack 5000

Asignamos la calidad de Render al dispositivo
Device.SetQuality D3DRMLIGHT_ON Or D3DRMFILL_SOLID Or D3DRMSHADE_GOURAUD
Creamos un Frame en la escena para asignar una fuente de luz
D3DRM.CreateFrame Scene, LightFrame

Creamos un objeto de luz tipo direccional
D3DRM.CreateLightRGB D3DRMLIGHT_DIRECTIONAL, 0.8, 0.8, 0.8, Light

Asignamos el objeto al frame anterior
LightFrame.AddLight Light

Monografias.com

Programación Direct3D

Dim light2 As IDirect3DRMLight Objeto luz ambiente

Es necesario crear una luz de tipo ambiente para definir la claridad por defecto que ofrecerá el Render. Sin luz ambiente no lograremos visualizar bien la escena
D3DRM.CreateLightRGB D3DRMLIGHT_AMBIENT, 0.4, 0.4, 0.4, light2

Aplicamos la luz en la escena
Scene.AddLight light2

Posicionamos la luz direccional en la escena
LightFrame.SetPosition Scene, 0, 0, 0

Posicionamos la cámara para ajustar el punto de vista
Camera.SetPosition Scene, 0, 0, 0
Camera.SetOrientation Scene, 0, 0, 1, 0, 1, 0

Creamos el objeto visual (Esfera) y su frame correspondiente
D3DRM.CreateFrame Scene, globeframe
D3DRM.CreateMeshBuilder Globe

Mediante el método Load asignamos el path que contiene el objeto
Globe.Load App.Path & "globe.x", 0, D3DRMLOAD_FROMFILE, 0, 0

Establecemos la calidad que tendrá el objeto de cara al Render
Globe.SetQuality D3DRMLIGHT_ON Or D3DRMFILL_SOLID Or D3DRMSHADE_GOURAUD

Monografias.com

Programación Direct3D

Dependiendo del punto de vista del observador, hay veces en que las texturas de los objetos parecen descolocarse u ofrecen una representación visual muy distinta a la que deberían tener en un principio. Mediante la corrección de perspectiva se soluciona este pequeño problema. Para ello, hay que establecer en true el método SetPerspective que apliquemos al objeto
Globe.SetPerspective 1

Asignamos el objeto a su frame y establecemos sus posiciones en la escena
globeframe.AddVisual Globe
globeframe.SetPosition Scene, 0, 0, 5
globeframe.SetOrientation Scene, 0, 0, 1, 0, 1, 0

Ponemos una rotación al objeto para animarlo constantemente
globeframe.SetRotation Scene, 1, 1, 1, 0.17

Le asignamos la textura
ApplyTexture Globe, App.Path & "fire.bmp"

Vaciamos los objetos que representan las Fuentes de luz
Set LightFrame = Nothing
Set Light = Nothing

Monografias.com

Programación Direct3D

 

Bucle principal
While salir = False

Dibuja en pantalla el render obtenido
redraw_clipper
DoEvents
Wend

Descarga el formulario cuando se acabe la aplicación
vacia_clipper
Unload Me
End Sub

Descarga los objetos DirectX creados
Sub vacia_clipper()
Set Scene = Nothing
Set Camera = Nothing
Set Viewport = Nothing
Set Device = Nothing
Set D3DRM = Nothing
Set clipper = Nothing
End Sub

Monografias.com

Programación Direct3D

 
Dibuja en pantalla el Render obtenido. Recordemos que el Render se alberga primero en el backbuffer y luego se vuelca automáticamente a la ventana
Public Sub redraw_clipper()
On Error GoTo mi_Error

Aplica las rotaciones y velocidades para todos los frames de la jerarquía
Scene.Move 1

Borra el Viewport con el color actual del background
Viewport.Clear

Renderiza una jerarquía de frames al Viewport utilizado. Sólo serán renderizados aquellos objetos visuales que estén en esa jerarquía de frames
Viewport.Render Scene

Copia la imagen que ha sido renderizada a la pantalla o buffer de destino
Device.Update

Exit Sub
mi_Error:
Resume
End Sub

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter